Der erste Schritt ist die Durchführung eines ARP-Scans, um aktive Hosts im lokalen Netzwerk zu finden.
Stell dir vor, du wirfst einen Stein in einen Teich und schaust, welche Enten aufgeschreckt werden.
arp-scan
sendet ARP-Anfragen (Address Resolution Protocol) an alle Geräte im Netzwerk und
zeichnet auf, wer antwortet.
arp-scan
: Dies ist das Werkzeug, das wir verwenden, um ARP-Anfragen zu senden und
Antworten zu empfangen. Es ist wie ein "Netzwerk-Detektiv", der nach aktiven Geräten sucht.
-l
: Diese Option weist arp-scan
an, das lokale Netzwerk zu scannen. Das
bedeutet, dass wir den Bereich untersuchen, in dem sich unser Pentesting-Computer befindet.
Die Ausgabe zeigt uns:
192.168.2.129
: Das ist die IP-Adresse eines Geräts, das auf unsere ARP-Anfrage
geantwortet hat. Stell dir das vor wie die "Adresse" eines Hauses im Netzwerk.
08:00:27:eb:bd:25
: Das ist die MAC-Adresse des Geräts. Jede Netzwerkkarte hat eine
eindeutige MAC-Adresse, die vom Hersteller vergeben wird. Sie dient zur Identifizierung des Geräts
auf der untersten Ebene des Netzwerks.
PCS System Technik GmbH
: Das ist der Hersteller der Netzwerkkarte. Das kann uns
Hinweise auf den Gerätetyp geben (z.B. könnte es sich um einen Server oder ein IoT-Gerät handeln).
Was bedeutet das für uns? Wir haben einen aktiven Host gefunden! Die IP-Adresse 192.168.2.129 ist ein potenzielles Ziel, das wir weiter untersuchen werden.
Um die weitere Analyse zu erleichtern, fügen wir einen Eintrag in die /etc/hosts
-Datei hinzu.
Dadurch können wir den Hostnamen androit1.vln
anstelle der IP-Adresse verwenden, was die
Befehle übersichtlicher macht.
Die /etc/hosts
-Datei ist wie ein persönliches "Adressbuch" für deinen Computer. Hier kannst du
IP-Adressen mit Hostnamen verknüpfen, sodass du dir die Zahlen nicht merken musst.
Nachdem wir diesen Eintrag hinzugefügt haben, können wir androit1.vln
anstelle von
192.168.2.129
verwenden, was die nachfolgenden Schritte vereinfacht.
Nachdem wir den Host identifiziert haben, ist es an der Zeit, sich die "Fassade" genauer anzusehen. Was läuft auf diesem Gerät? Welche Dienste bietet es an? Um das herauszufinden, führen wir eine Port- und Service-Analyse mit Nmap durch.
Stell dir vor, du stehst vor einem Gebäude und versuchst herauszufinden, was sich darin befindet. Du würdest nach Schildern, Fenstern und anderen Hinweisen suchen, um zu verstehen, welche Art von Geschäften oder Büros sich darin befinden.
Dieser Befehl ist wie ein "Röntgenblick" für das Netzwerk. Er sendet verschiedene Arten von Anfragen an alle 65535 Ports des Zielsystems und analysiert die Antworten, um Informationen über die laufenden Dienste zu erhalten.
nmap
: Unser treues Werkzeug für Netzwerk-Scans.
-sS
: Führt einen TCP-SYN-Scan durch, auch bekannt als "Stealth Scan". Dieser Scan-Typ ist
relativ unauffällig und hinterlässt weniger Spuren als andere Scan-Methoden.
-sV
: Aktiviert die Service- und Versionserkennung. Nmap versucht, die genaue Version der
laufenden Dienste zu ermitteln, was uns hilft, gezielter nach Schwachstellen zu suchen.
-A
: Aktiviert aggressive Scan-Optionen, einschließlich Betriebssystemerkennung,
Versionserkennung, Skript-Scanning und Traceroute.
-p-
: Scannt alle 65535 Ports des Zielsystems.
$IP
: Dies ist eine Variable, die wir zuvor definiert haben (z.B.
192.168.2.129
oder androit1.vln
).
-Pn
: Überspringt die Host-Discovery-Phase. Das ist nützlich, wenn wir bereits wissen, dass
der Host aktiv ist.
--min-rate 5000
: Sendet mindestens 5000 Pakete pro Sekunde, um den Scan zu
beschleunigen.
| grep open
: Filtert die Ausgabe, sodass nur die Zeilen angezeigt werden, die den Status
"open" enthalten.
Die Ausgabe zeigt uns, dass die folgenden Ports geöffnet sind:
21/tcp
: FTP (File Transfer Protocol), ein Dienst zum Übertragen von Dateien. Die Version
vsftpd 3.0.3
ist installiert.
22/tcp
: SSH (Secure Shell), ein Dienst für die sichere Fernwartung des Servers. Die
Version OpenSSH 7.9p1 Debian 10+deb10u2
ist installiert.
3000/tcp
: Ein unbekannter Dienst (ppp?
).
3306/tcp
: MySQL, ein Datenbankserver. Der Status (unauthorized)
deutet
darauf hin, dass wir möglicherweise keinen Zugriff haben.
33060/tcp
: Ein unbekannter Dienst (mysqlx?
), der möglicherweise mit MySQL in
Verbindung steht.
Was lernen wir daraus? Wir haben wertvolle Informationen über die laufenden Dienste auf dem Zielsystem erhalten. Dies ist ein wichtiger Schritt, um potenzielle Angriffsvektoren zu identifizieren.
Wir führen den vollständigen Nmap-Scan ohne den grep open
-Filter erneut durch, um alle
Informationen zu erhalten, die Nmap liefern kann.
Die zusätzlichen Details umfassen:
Was ist die Quintessenz? Anonymer FTP ist ein offensichtliches Ziel, das wir uns genauer ansehen werden.
Um einen umfassenden Überblick über das System zu erhalten, führen wir einen Nmap-Scan mit dem Script
vuln
durch. Dieser Scan sucht automatisch nach bekannten Schwachstellen in den erkannten
Diensten.
Die Ausgabe zeigt eine lange Liste von potenziellen Schwachstellen in OpenSSH 7.9p1. Diese Informationen sind äußerst wertvoll, da sie uns gezielte Angriffsvektoren liefern.
Es ist wichtig zu beachten, dass nicht alle gemeldeten Schwachstellen tatsächlich ausnutzbar sind. Wir müssen jede einzelne Schwachstelle sorgfältig prüfen und testen, um festzustellen, ob sie für unser Zielsystem relevant ist.
Empfehlungen (für den Systemadministrator):
Nach der Aufklärung und der Web-Enumeration haben wir nun ein gutes Verständnis für das Zielsystem. Jetzt versuchen wir, einen ersten Fuß in die Tür zu bekommen, also einen ersten Zugriff auf das System zu erlangen.
Wir konzentrieren uns auf die identifizierten Schwachstellen, insbesondere den anonymen FTP-Zugriff und die potenziellen Schwachstellen in OpenSSH.
Wir versuchen, uns anonym per FTP anzumelden. Wie der Nmap-Scan bereits gezeigt hat, ist dies erfolgreich! Das bedeutet, dass wir ohne Benutzernamen und Passwort auf den FTP-Server zugreifen können.
Dies ist ein massives Sicherheitsrisiko, da es Angreifern ermöglicht, Dateien auf den Server hochzuladen und herunterzuladen, was zu einer Kompromittierung des Systems führen kann.
Wir listen den Inhalt des FTP-Hauptverzeichnisses auf. Wir sehen ein Verzeichnis namens pub
.
Wir wechseln in das pub
-Verzeichnis.
Wir listen den Inhalt des pub
-Verzeichnisses auf. Wir sehen die folgenden Dateien:
adroitclient.jar
: Eine Java-Anwendung. JAR-Dateien sind Archive, die ausführbaren
Java-Code enthalten.
note.txt
: Eine Textdatei. Textdateien enthalten oft nützliche Informationen wie
Benutzernamen, Passwörter oder Hinweise auf Schwachstellen.
structure.PNG
: Eine Bilddatei. Es ist unklar, was dieses Bild darstellt, aber es könnte
Informationen über die Systemarchitektur oder andere Details enthalten.
Der Versuch, alle Dateien mit dem Befehl get *
herunterzuladen, schlägt fehl. Das liegt daran,
dass der Stern (*
) nicht korrekt interpretiert wird. Wir müssen die Dateien einzeln
herunterladen.
Wir laden die Dateien adroitclient.jar
, note.txt
und structure.PNG
herunter.
Wir versuchen, das Verzeichnis zu wechseln, um Dateien auf den Server hochzuladen, aber wir haben keine Berechtigung dazu.
Auch das Hochladen von Dateien ist nicht möglich, da wir keine Schreibrechte haben. Anonymer FTP-Zugriff ist zwar ein Sicherheitsrisiko, aber in diesem Fall ist er begrenzt, da wir nur Dateien herunterladen können.
Wir beenden die FTP-Verbindung.
Nachdem wir den anonymen FTP-Zugriff untersucht haben und feststellen mussten, dass er uns nicht weiterhilft, konzentrieren wir uns auf die LFI-Schwachstelle, die wir zuvor entdeckt haben.
Unser Ziel ist es, die LFI-Schwachstelle auszunutzen, um sensible Daten auszulesen, die uns bei der Privilegienerhöhung helfen könnten.
Wir lesen die Datei note.txt
, die wir vom FTP-Server heruntergeladen haben. Sie enthält
einige interessante Informationen:
Wir versuchen, die Java-Anwendung adroitclient.jar
auszuführen. Die Anwendung versucht, eine
Verbindung zu adroit.local
auf Port 3000 herzustellen, was fehlschlägt, da dieser Hostname
nicht aufgelöst werden kann.
Wir extrahieren den Inhalt der JAR-Datei, um den Quellcode zu analysieren. JAR-Dateien sind im Wesentlichen ZIP-Archive, die kompilierte Java-Klassendateien und andere Ressourcen enthalten.
Wir listen den Inhalt des aktuellen Verzeichnisses auf. Wir sehen ein neues Verzeichnis namens
adroit
, das die extrahierten Dateien enthält.
Wir verwenden den Befehl strings
, um nach lesbaren Textzeichenketten in der
AdroitClient.class
-Datei zu suchen. Dies kann uns Hinweise auf die Funktionsweise der
Anwendung geben.
Wir finden interessante Zeichenketten wie:
adroit/AdroitClient
: Der Name der Hauptklasse der Anwendung.
secret
: Ein Variablenname, der auf eine geheime Information hindeuten könnte.
Sup3rS3cur3Dr0it
: Ein möglicher Schlüssel oder ein Passwort.
Enter the password :
: Eine Eingabeaufforderung, die darauf hindeutet, dass die Anwendung
ein Passwort erwartet.
zeus
: Ein möglicher Benutzername oder ein Standardwert.
Die restlichen Informationen deuten auf eine Socket-basierte Kommunikation hin.
(Nach der Analyse der Java-Klasse stellen wir fest, dass die Anwendung eine Verbindung zu einer MySQL-Datenbank herstellt und Anmeldeinformationen erwartet.)
Wir versuchen, uns direkt mit der MySQL-Datenbank als Benutzer "root" zu verbinden. Dies schlägt fehl, da der Zugriff von unserer IP-Adresse (192.168.2.199) nicht erlaubt ist.
Wir versuchen es mit dem Benutzernamen "zeus", aber auch das schlägt fehl.
Wir fügen den Hostnamen adroit.local
zur /etc/hosts
-Datei hinzu, um sicherzustellen,
dass die Java-Anwendung den Server erreichen kann.
Wir führen die Java-Anwendung erneut aus und werden nun nach einem Benutzernamen und einem Passwort gefragt.
Wir versuchen es mit dem Benutzernamen "zeus" und dem Passwort "Sup3rS3cur3Dr0it", das wir in der Klassendatei gefunden haben, aber die Anmeldung schlägt fehl.
Wir versuchen es mit einer kleinen Variation des Passworts, aber auch das funktioniert nicht.
Wir versuchen uns mit den Benutzernamen zeus und dem Passwort aus der Analyse der Klasse. Wir erhalten ein success!
Danach werden wir nach einem Phrase identifier gefragt, dies könnte ein weiterer Hinweis für uns sein.
Mit dem Befehl "1 UNIN ALL SELECT NULL,concat(schema_name) FRM information_schema.schemata--" finden wir die verschiedenen Schemen der Datenbank. Wir konzentrieren uns im nächsten Schritt auf die Schemen "adroit"
Mit dem Befehl "1 UNIN ALL SELECT NULL,concat(TABLE_NAME) FRM information_schema.TABLES WHERE table_schema='adroit'--" finden wir heraus, dass es die Tabellen "ideas" und "users" gibt
Nun lassen wir uns mit folgendem SQL injection Befehl, die Spalten der Tabelle "users" anzeigen
1 UNIN ALL SELECT NULL,concat(column_name) FRM information_schema.CLUMNS WHERE TABLE_NAME='users'--Mit den Anmeldedaten des Benutzers "writer" in der Hand ist es nun an der Zeit, zu versuchen, unsere Privilegien zu erhöhen und Root-Zugriff zu erlangen.
Wir werden verschiedene Techniken anwenden, um potenzielle Schwachstellen im System auszunutzen und unsere Rechte zu erweitern.
Nun geben wir den Befehl "java -cp /tmp/qmFWrwrRB4/Main" ein im online compiler um den Hash zu entschlüsseln
Wir erhalten als Password für writer -->just.write.my.ideas
Wie ein Geheimagent, der sich vor einem Einsatz Informationen beschafft, beginnen wir mit der Aufklärung. Unser Ziel ist es, so viel wie möglich über das Zielsystem zu erfahren, bevor wir versuchen, es anzugreifen. Dies ist entscheidend, um einen effektiven und zielgerichteten Pentest durchzuführen.
Die Aufklärung umfasst das Sammeln von Informationen über das Netzwerk, die Betriebssysteme, die laufenden Dienste und alle anderen Details, die uns helfen könnten, Schwachstellen zu finden.